home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DOS.SWG / 0022_Extend DOS to 255 Files.pas < prev    next >
Pascal/Delphi Source File  |  1993-08-27  |  3KB  |  122 lines

  1. {
  2. MARK LEWIS
  3.  
  4. > The problem is that Without allocating a new FCB For Dos, you
  5. > can't have more than 15 or so Files open at a time in TP, no
  6. > matter WHAT the CONFIG.SYS FileS= statement says.  (By default,
  7.  
  8. i cannot remember exactly what INT $21 Function $6700 is but here's a PD Unit
  9. i got from borland's bbs the other day... i've trimmed the Text down for
  10. posting... if anyone Really needs everything that comes With it, they should
  11. look For EXTend6.*
  12. }
  13.  
  14. Unit Extend;
  15. { This extends the number of File handles from 20 to 255 }
  16. { Dos requires 5 For itself. Applications can use up to 250 }
  17.  
  18. Interface
  19.  
  20. Implementation
  21. Uses
  22.   Dos;
  23.  
  24. Const
  25.   Handles = 255;
  26.   { You can reduce the value passed to Handles if fewer Files are required. }
  27.  
  28. Var
  29.   Reg : Registers;
  30.   begin
  31.   { Check the Dos Version - This technique only works For Dos 3.0 or later }
  32.   Reg.ah := $30;
  33.   MsDos(Reg);
  34.   if Reg.al<3 then
  35.   begin
  36.     Writeln('Extend Unit Require Dos 3.0 or greater');
  37.     halt(1);
  38.   end;
  39.  
  40.   {Reset the FreePtr - This reduces the heap space used by Turbo Pascal}
  41.   if HeapOrg <> HeapPtr then
  42.   {Checks to see if the Heap is empty}
  43.   begin
  44.     Write('Heap must be empty before Extend Unit initializes');
  45.     Writeln;
  46.     halt(1);
  47.   end;
  48.   Heapend := ptr(Seg(Heapend^) - (Handles div 8 + 1), Ofs(Heapend^));
  49.  
  50.   {Determine how much memory is allocated to Program}
  51.   {Reg.Bx will return how many paraGraphs used by Program}
  52.   Reg.ah := $4A;
  53.   Reg.es := PrefixSeg;
  54.   Reg.bx := $FFFF;
  55.   msDos(Reg);
  56.  
  57.   {Set the Program size to the allow For new handles}
  58.   Reg.ah := $4A;
  59.   Reg.es := PrefixSeg;
  60.   Reg.bx := reg.bx - (Handles div 8 + 1);
  61.   msDos(Reg);
  62.  
  63.   {Error when a Block Size is not appropriate}
  64.   if (Reg.flags and 1) = 1 then
  65.   begin
  66.     Writeln('Runtime Error ', Reg.ax, ' in Extend.');
  67.     halt(1);
  68.   end;
  69.  
  70.   {Allocate Space For Additional Handles}
  71.   reg.ah := $67;
  72.   reg.bx := Handles;
  73.   MsDos(reg);
  74. end.
  75.  
  76. {
  77. Write the following Program to a separate File. This Program tests the EXTend
  78. Unit. This test should be done on systems equipped With a hard disk.
  79. }
  80.  
  81. Program TestEx;
  82.  
  83. Uses
  84.   EXTend;
  85.  
  86. Type
  87.   FileArray = Array [1..250] of Text;
  88.  
  89. Var
  90.   f : ^FileArray;
  91.   i : Integer;
  92.   s : String;
  93.  
  94. begin
  95.   {Allocate Space For fILE Variable Table}
  96.   new(f);
  97.   {oPEN 250 Files simultaneously}
  98.   For i:=1 to 250 do
  99.   begin
  100.     str(i,s);
  101.     Assign(f^[i],'Dum'+s+'.txt');
  102.     reWrite(f^[i]);
  103.     Writeln('Open #',s);
  104.   end;
  105.   {Write some Text to the Files}
  106.   For i:=1 to 250 do
  107.   Write(f^[i],'This is a test File');
  108.   {Close the Files}
  109.   For i:=1 to 250 do
  110.   begin
  111.     close(f^[i]);
  112.     Writeln('Closing #',i);
  113.   end;
  114.   {Erase the Files}
  115.   For i:=1 to 250 do
  116.   begin
  117.     erase(f^[i]);
  118.     Writeln('Erasing #',i);
  119.   end;
  120. end.
  121.  
  122.